package co.yixiang.common.config.datasource;

import co.yixiang.config.datasource.DynamicDataSourceContextHolder;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import javax.sql.DataSource;
import java.util.Map;

/**
 * 动态数据源类，继承自Spring的AbstractRoutingDataSource
 * 用于在运行时根据具体业务切换数据源
 */
public class DynamicDataSource extends AbstractRoutingDataSource
{
    /**
     * 构造方法，初始化数据源
     *
     * @param defaultTargetDataSource 默认的数据源
     * @param targetDataSources       所有候选数据源的集合
     */
    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
    {
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        super.setTargetDataSources(targetDataSources);
        super.afterPropertiesSet();
    }

    /**
     * 确定当前应该使用哪个数据源
     * 通过DynamicDataSourceContextHolder获取当前线程绑定的数据源类型
     *
     * @return 当前线程绑定的数据源类型
     */
    @Override
    protected Object determineCurrentLookupKey()
    {
        return DynamicDataSourceContextHolder.getDataSourceType();
    }
}
